﻿// Write a program that converts a number in the range [0...999] 
// to a text corresponding to its English pronunciation. 

using System;

class ConvertNumberToText
{
    static void Main()
    {
        Console.Write("Enter a number [0..999]: ");
        int numberToConvert = int.Parse(Console.ReadLine());

        string digitsText = "";

        Console.Write("You entered ");

        if (numberToConvert == 0)
        {
            digitsText = "zero";
        }
        else
        {
            if ((numberToConvert > 0) && (numberToConvert <= 999))
            {
                int hundreds = numberToConvert / 100;

                if ((hundreds >= 1) && (hundreds <= 9))
                {
                    switch (hundreds)
                    {
                        case 1: { digitsText += "one"; break; }
                        case 2: { digitsText += "two"; break; }
                        case 3: { digitsText += "three"; break; }
                        case 4: { digitsText += "four"; break; }
                        case 5: { digitsText += "five"; break; }
                        case 6: { digitsText += "six"; break; }
                        case 7: { digitsText += "seven"; break; }
                        case 8: { digitsText += "eight"; break; }
                        case 9: { digitsText += "nine"; break; }
                    }
                    digitsText += " hundred";
                }

                int reminder = numberToConvert % 100;

                if ((hundreds != 0) && (reminder != 0))
                {
                    if (reminder < 10)
                    {
                        digitsText += " and ";
                    }
                    else
                    {
                        digitsText += " ";
                    }
                }

                switch (reminder)
                {
                    case 1: { digitsText += "one"; break; }
                    case 2: { digitsText += "two"; break; }
                    case 3: { digitsText += "three"; break; }
                    case 4: { digitsText += "four"; break; }
                    case 5: { digitsText += "five"; break; }
                    case 6: { digitsText += "six"; break; }
                    case 7: { digitsText += "seven"; break; }
                    case 8: { digitsText += "eight"; break; }
                    case 9: { digitsText += "nine"; break; }
                    case 10: { digitsText += "ten"; break; }
                    case 11: { digitsText += "eleven"; break; }
                    case 12: { digitsText += "twelve"; break; }
                    case 13: { digitsText += "thirteen"; break; }
                    case 14: { digitsText += "fourteen"; break; }
                    case 15: { digitsText += "fifteen"; break; }
                    case 16: { digitsText += "sixteen"; break; }
                    case 17: { digitsText += "seventeen"; break; }
                    case 18: { digitsText += "eighteen"; break; }
                    case 19: { digitsText += "nineteen"; break; }
                    case 20: { digitsText += "twenty"; break; }
                    case 30: { digitsText += "thirty"; break; }
                    case 40: { digitsText += "forty"; break; }
                    case 50: { digitsText += "fifty"; break; }
                    case 60: { digitsText += "sixty"; break; }
                    case 70: { digitsText += "seventy"; break; }
                    case 80: { digitsText += "eighty"; break; }
                    case 90: { digitsText += "ninety"; break; }
                    default:
                        {
                            int tens = (reminder / 10) * 10;

                            switch (tens)
                            {
                                case 20: { digitsText += "twenty"; break; }
                                case 30: { digitsText += "thirty"; break; }
                                case 40: { digitsText += "forty"; break; }
                                case 50: { digitsText += "fifty"; break; }
                                case 60: { digitsText += "sixty"; break; }
                                case 70: { digitsText += "seventy"; break; }
                                case 80: { digitsText += "eighty"; break; }
                                case 90: { digitsText += "ninety"; break; }
                            }

                            int digit = reminder % 10;
                            switch (digit)
                            {
                                case 1: { digitsText += " one"; break; }
                                case 2: { digitsText += " two"; break; }
                                case 3: { digitsText += " three"; break; }
                                case 4: { digitsText += " four"; break; }
                                case 5: { digitsText += " five"; break; }
                                case 6: { digitsText += " six"; break; }
                                case 7: { digitsText += " seven"; break; }
                                case 8: { digitsText += " eight"; break; }
                                case 9: { digitsText += " nine"; break; }
                            }
                            break;
                        }
                }
            }
            else
            {
                Console.WriteLine("Not a valid number");
            }
        }
        if (digitsText.Length > 0)
        {
            //make first letter capital
            digitsText = digitsText.Remove(1).ToUpper() + digitsText.Substring(1);
            Console.WriteLine(digitsText);
        }
    }
}
